package com.ntd.study.database.study_screw;

import cn.smallbun.screw.core.Configuration;
import cn.smallbun.screw.core.engine.EngineConfig;
import cn.smallbun.screw.core.engine.EngineFileType;
import cn.smallbun.screw.core.engine.EngineTemplateType;
import cn.smallbun.screw.core.execute.DocumentationExecute;
import cn.smallbun.screw.core.process.ProcessConfig;
import com.ntd.study.database.study.datasource.HandleDataSource;

import javax.sql.DataSource;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Arrays;

/**
 * 数据库文档生成
 */
public class ScrewApplicationUtil {
    DataSource dataSourceMysql;
    public ScrewApplicationUtil(DataSource dataSourceMysql) {
        this.dataSourceMysql = dataSourceMysql;
    }
    public void execute() {
        new DocumentationExecute(getConfiguration(getEngineConfig())).execute(); // 执行生成
    }
    private Configuration getConfiguration(EngineConfig engineConfig) {
        return Configuration.builder() // 生成文档配置（包含以下自定义版本号、描述等配置连接）
                    .version("1.0.3")
                    .description("生成文档信息描述")
                    .dataSource(dataSourceMysql)
                    .engineConfig(engineConfig)
                    .produceConfig(getProcessConfig())
                    .build();
    }
    private EngineConfig getEngineConfig() {
        return EngineConfig.builder() // 生成文件配置
                    .fileOutputDir(System.getProperty("user.dir") + "/dataDoc") // 生成文件路径，自己mac本地的地址，这里需要自己更换下路径
                    .openOutputDir(false) // 打开目录
                    .fileType(EngineFileType.WORD) // 文件类型
                    .produceType(EngineTemplateType.freemarker).build();
    }
    /**
     * 配置想要生成的表+ 配置想要忽略的表
     * @return 生成表配置
     */
    public static ProcessConfig getProcessConfig() {
        return ProcessConfig.builder()
//                .designatedTableName(Arrays.asList("interface_info")) // 根据名称指定表生成
                .designatedTablePrefix(new ArrayList<>()) // 根据表前缀生成
                .designatedTableSuffix(new ArrayList<>()) // 根据表后缀生成
                .ignoreTableName(Arrays.asList("a", "test_group"))  // 忽略表名
                .ignoreTablePrefix(Arrays.asList("a", "t")) // 忽略表前缀，如忽略a开头的数据库表
                .ignoreTableSuffix(Arrays.asList("_test", "czb_")).build(); // 忽略表后缀
    }

    public static void main(String[] args) throws SQLException {
        final HandleDataSource handleDataSource = new HandleDataSource("jdbc:mysql://rm-bp1k6dy03e1nj07q8o.mysql.rds.aliyuncs.com:3306?useUnicode=true&characterEncoding=utf8&serverTimezone=UTC",
                "com.mysql.cj.jdbc.Driver",
                "bootdo",
                "Hntl@2020");
        new ScrewApplicationUtil(handleDataSource.getDataSource()).execute();
    }
}